package com.lxl.demo;

import java.util.Arrays;
import java.util.HashMap;

//package com.lxl.demo;
/*和为 K 的子数组
给你一个整数数组 nums 和一个整数 k ，请你统计并返回 该数组中和为 k 的子数组的个数
子数组是数组中元素的连续非空序列。
输入：nums = [1,1,1], k = 2
输出：2
输入：nums = [1,2,3], k = 3
            0 1 2 3 4  5  6   5
            1 1 1 1 1  1  1
              1 3 6 10 15 21  5


输出：2
* */
class Demo1 {
    public int subarraySum(int[] nums, int k) {
        HashMap<Integer, Integer> map = new HashMap<>();
        map.put(0, 1);
        int res = 0;
        int sum = 0;
        for (int num : nums) {
            sum += num;
            if (map.containsKey(sum - k)) {
                res += map.get(sum - k);
            }
            map.put(sum, map.getOrDefault(sum, 0) + 1);
        }
        return res;
    }

    public static void main(String[] args) {
        Demo1 demo1 = new Demo1();
        int i = demo1.subarraySum(new int[]{1, 1, 1}, 2);
        System.out.println("i = " + i);
    }
}